#include "All.h"
unsigned int KEY_qq=0; 
unsigned char key_ii=0;
unsigned char KEY_VALUE=0x00;
unsigned int KEY_op=0x03FF;  //更改键值  未完成
tKEY_S KEY_s;
tKEY_Var KEY_Var;
void Key_GPIO_init(void)
{
	GPIO_InitType  GPIO_InitStructure;	
	RCC_EnableAPB2PeriphClk(Key_RCC,ENABLE);
	GPIO_InitStructure.Pin = Key_Row_IO; 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 
	GPIO_InitPeripheral(GPIOB, &GPIO_InitStructure);
	
	GPIO_InitStructure.Pin = Key_Column_IO; 
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 
	GPIO_InitPeripheral(GPIOE, &GPIO_InitStructure);		
}	



void Key_Time(void)
{
	KEY_Scan();
	if(KEY_Var.Ms!=0)KEY_Var.Ms--;
}	

void KEYs_Init(void)
{
	KEY_s.KeyCnt1 = 0;
	KEY_s.Keylock1 = 0;
	KEY_s.KeyValue = 0;
	KEY_s.KeyLongValue = 0;
	KEY_s.ShortKeyFlag1 = 0;
	KEY_s.x = 0;
	KEY_s.y = 0;
	KEY_s.z = 0;
}

void KEY_Scan(void)
{
		KEY_qq=0;
		GPIO_ResetBits(Key_Column_GPIO,GPIO_PIN_1);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_2);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_3);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_4);	
	    __NOP();__NOP();__NOP();__NOP();__NOP();
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_9)==0)KEY_qq=0x000001;
		else
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_6)==0)KEY_qq=0x000002;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_7)==0)KEY_qq=0x000004;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_8)==0)KEY_qq=0x000008;	

		GPIO_ResetBits(Key_Column_GPIO,GPIO_PIN_2);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_1);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_3);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_4);	
	   __NOP();__NOP();__NOP();__NOP();__NOP();		
		if((GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_9)==0)&&(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_7)==0))KEY_qq=0x00A000;
		else		
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_9)==0)KEY_qq=0x000010;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_6)==0)KEY_qq=0x000020;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_7)==0)KEY_qq=0x000040;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_8)==0)KEY_qq=0x000080;	

		GPIO_ResetBits(Key_Column_GPIO,GPIO_PIN_3);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_1);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_2);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_4);
		__NOP();__NOP();__NOP();__NOP();__NOP();	
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_9)==0)KEY_qq=0x000100;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_6)==0)KEY_qq=0x000200;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_7)==0)KEY_qq=0x000400;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_8)==0)KEY_qq=0x000800;	

		GPIO_ResetBits(Key_Column_GPIO,GPIO_PIN_4);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_1);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_2);
		GPIO_SetBits(Key_Column_GPIO,GPIO_PIN_3);	
		__NOP();__NOP();__NOP();__NOP();__NOP();	

		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_9)==0)KEY_qq=0x001000;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_6)==0)KEY_qq=0x002000;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_7)==0)KEY_qq=0x004000;
		else		 
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_8)==0)KEY_qq=0x008000;	
		else
		if(GPIO_ReadInputDataBit(Key_Row_GPIO, GPIO_PIN_5)==0)KEY_qq=0x010000;	

		KEY_s.x=KEY_qq;
	    if(KEY_s.x == 0)
		{
			KEY_s.Keylock1 = 0;
			KEY_s.KeyCnt1 = 0;
//			KEY_s.KeyLongValue = 0;//松手时不进行注册检查
			if(KEY_s.ShortKeyFlag1 == 1)
			{
				KEY_s.ShortKeyFlag1 = 0;
				if(KEY_s.y == 0x00000001)KEY_s.KeyValue =101;
				if(KEY_s.y == 0x00000002)KEY_s.KeyValue =102;
				if(KEY_s.y == 0x00000004)KEY_s.KeyValue =103;
				if(KEY_s.y == 0x00000008)KEY_s.KeyValue =104;			
				if(KEY_s.y == 0x00000010)KEY_s.KeyValue =105;
				if(KEY_s.y == 0x00000020)KEY_s.KeyValue =106;
				if(KEY_s.y == 0x00000040)KEY_s.KeyValue =107;
				if(KEY_s.y == 0x00000080)KEY_s.KeyValue =108;		
				if(KEY_s.y == 0x00000100)KEY_s.KeyValue =109;
				if(KEY_s.y == 0x00000200)KEY_s.KeyValue =110;
				if(KEY_s.y == 0x00000400)KEY_s.KeyValue =111;
				if(KEY_s.y == 0x00000800)KEY_s.KeyValue =112;						
				if(KEY_s.y == 0x00001000)KEY_s.KeyValue =113;					
				if(KEY_s.y == 0x00002000)KEY_s.KeyValue =114;
				if(KEY_s.y == 0x00004000)KEY_s.KeyValue =115;
				if(KEY_s.y == 0x00008000)KEY_s.KeyValue =116;						
				if(KEY_s.y == 0x00010000)KEY_s.KeyValue =117;
				
			}
		}
		else if(KEY_s.Keylock1 == 0)
		{	
			KEY_s.KeyCnt1 ++;
			if(KEY_s.KeyCnt1 >= 50)//80
			{
				KEY_s.ShortKeyFlag1 = 1;
				KEY_s.y = KEY_s.x ;		
			}
			if(KEY_s.KeyCnt1 == 1000)
			{
				KEY_s.ShortKeyFlag1 = 0;
				KEY_s.KeyCnt1 = 0;
				KEY_s.Keylock1 = 1;			
				if(KEY_s.x == 0x0000A000)KEY_s.KeyValue =201;
		
			}
		}
}


void KEY_Clr(void)
{
	KEY_s.KeyCnt1 = 0;
	KEY_s.Keylock1 = 1;  //长按标志位 如果清除 会导致长按以后马上进入短按状态
	KEY_s.KeyValue = 0;
//	KEY_s.ShortKeyFlag1 = 0;
	KEY_s.x = 0;
//	KEY_s.y = 0;
	KEY_s.z = 0;
}


/*
GPIO_Pin_1 GPIOB  0x01

*/



void KEY_Event_Handle(void)
{ 
  if(KEY_s.KeyValue!=0x00)
	{

		//if(Bed_info.Flag == 0x01)LED_1_En();
		LED_1_En();
	}		
	switch(KEY_s.KeyValue)
	{
		case 0: break;
//============抬起================
		case 101: /*震动 -*/
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x09,0x00,0x00); 	
			KEY_Clr();		
			break;		
		case 102: /*音量-*/	
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x07,0x00,0x00);
			KEY_Clr();		
			break;	
		case 103: /*震动 +*/
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x08,0x00,0x00);	
			KEY_Clr();		
			break;		
		case 104: /*震动 静音*/	
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x20,0x00,0x00); 
			KEY_Clr();		
			break;	
		case 105: /*OFF*/		
			NRF_Data_Storage7(0xA1,0x11,0x00,0x00,0x00,0x00,0x00);	
			KEY_Clr();		
			break;	
		case 106: /*播放/暂停*/	
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x05,0x00,0x00);		
			KEY_Clr();		
			break;		
		case 107: /*L 强劲*/					
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x22,0x00);
			KEY_Clr();		
			break;	
		case 108:  /* L 轻缓*/		
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x21,0x00);	
			KEY_Clr();		
			break;	
		case 109: /*头部上升  L加热*/	
			NRF_Data_Storage7(0xA1,0x00,0x30,0x00,0x00,0x00,0x00);				
			KEY_Clr();		
			break;		
		case 110: /*音量+*/	
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x06,0x00,0x00);		
			KEY_Clr();		
			break;	
		case 111: /*头部下降  L 强劲*/	
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x32,0x00);			
			KEY_Clr();		
			break;	
		case 112: /*空  L 轻缓*/	
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x00,0x31,0x00);			
			KEY_Clr();		
			break;		
		case 113: /*尾部上升 R加热 */
			NRF_Data_Storage7(0xA1,0x00,0x40,0x00,0x00,0x00,0x00);				
			KEY_Clr();		
			break;	
		case 114: /*上一曲*/	
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x01,0x00,0x00);	
			KEY_Clr();		
			break;	
		case 115: /*尾部下降 律动 2*/	
			NRF_Data_Storage7(0xA1,0x00,0x00,0x30,0x00,0x00,0x00);				
			KEY_Clr();		
			break;		
		case 116: /*空 律动 1*/	
			NRF_Data_Storage7(0xA1,0x00,0x00,0x20,0x00,0x00,0x00);			
			KEY_Clr();		
			break;	
		case 117: /*下一曲*/	
			NRF_Data_Storage7(0xA1,0x00,0x00,0x00,0x02,0x00,0x00);		
			KEY_Clr();		
			break;	
//============长按================
		case 201: 
			NRF_Data_Storage7(0x66,0x66,0x66,0x66,0x66,0x66,0x66);			
			KEY_Clr();
			break;		

	}
}

void Key_Task(void)
{
  KEY_Event_Handle();
}	



